package com.hainatong.shiphelper.api;


import com.hainatong.shiphelper.login.entity.UserResult;
import com.hainatong.shiphelper.mainhome.entity.MsgBean;
import com.hainatong.shiphelper.mainhome.entity.UploadImgBean;
import com.hainatong.shiphelper.module.OAmgr.entity.AuditActionBean;
import com.hainatong.shiphelper.module.QSHE.entity.QSHEDetailBean;
import com.hainatong.shiphelper.module.QSHE.entity.QSHETypeBean;
import com.hainatong.shiphelper.module.cert.entity.CertBean;
import com.hainatong.shiphelper.module.cert.entity.CertChangeParam;
import com.hainatong.shiphelper.module.cert.entity.FileInfo;
import com.hainatong.shiphelper.module.cert.entity.ShipCertBean;
import com.hainatong.shiphelper.module.handlejob.entity.ApplyHandleBean;
import com.hainatong.shiphelper.module.handlejob.entity.HandleInfoBean;
import com.hainatong.shiphelper.module.handlejob.entity.VoyageBean;
import com.hainatong.shiphelper.module.holiday.entity.*;
import com.hainatong.shiphelper.module.warehouse.entity.*;
import com.hainatong.shiphelper.module.workermgr.entity.WorkerBean;
import io.reactivex.Observable;
import okhttp3.MultipartBody;
import retrofit2.http.*;

import java.util.List;
import java.util.Map;

public interface CanBoService
{
    //http://192.168.0.88:9992/  http://shipapi.hbhnt.net/
    String BASE_URL = "http://shipapi.hbhnt.net/";

    // 测试接口 废弃
    @POST("/api/User/login")
    Observable<ApiResult<UserResult>> login(@Body Map<String,String> loginParam);

    /******************************出入库******************************/

    @FormUrlEncoded
    @POST("api/Bsc_warehouse/GetByUUid")
    Observable<ApiResult<ShelfUuidBean>> queryWareHouseByUUid(@Field("id") String uuid);

    /**
     *  查仓库
     * @param shipid
     * @return
     */
    @FormUrlEncoded
    @POST("api/Bsc_warehouse/GetWareHouseByShip")
    Observable<ApiResult<List<ShipWareHouseBean>>> queryWareHouseByShipId(@Field("shipid") String shipid);


    /**
     * 查 货架
     * @param name
     * @return
     */
    @FormUrlEncoded
    @POST("api/Bsc_warehouse/GetShelfByWareName")
    Observable<ApiResult<List<WareShelfBean>>> queryShelfByWareHouseName(@Field("name") String name);


    /**
     * 查 物资 信息
     * @param code
     * @return
     */
    @FormUrlEncoded
    @POST("api/Sys_impacode/GetByCode")
    Observable<ApiResult<ImpaBean>> getImpaByCode(@Field("code") String code);


    /**
     *  查批次
     * @param code
     * @return
     */
    @FormUrlEncoded
    @POST("api/Sys_good_stock_log/GetBatchNoByItemCode")
    Observable<ApiResult<List<String>>> getImpaBatchNoByCode(@Field("code") String code);

    /**
     * 物资 入库     type  出入库类别,1入库,2出库,3归还,4损坏,5消耗
     * @param mParam
     * @return
     */
    @POST("api/Sys_good_stock_log/Warehousing")
    Observable<ApiResult<RukuParamBean>> rukuTask(@Body RukuParamBean mParam);


    /**
     *  查询领用 物资列表
     * @param mParam
     * @return
     */
    @POST("api/Sys_good_stock_log/GetPageData")
    Observable<HttpResult<List<LinYongInfoBean>>> getLinYongRecordLogByParam(@Body Map<String,Object> mParam);


    /**
     *  删除 入库物资  by  uuid 数组
     * @param uuids
     * @return
     */
    @POST("api/Sys_good_stock_log/Del")
    Observable<ApiResult<Object>> deleteRukuGoodsLogByUuid(@Body String[] uuids);

    /**
     *  物资 出库    数组   （ 归还  任务）
     * @param chukuGoods
     * @return
     */
    @POST("api/Sys_good_stock_log/Requisition")
    Observable<ApiResult<Object>> chuKuTask(@Body ChuKuRaramBean[] chukuGoods);

    /**
     *  获取领用人列表  (查询领用人 记录 )
     * @param name
     * @return
     */
    @FormUrlEncoded
    @POST("api/Sys_good_stock_log/GetEmployerList")
    Observable<ApiResult<List<WorkerRecordBean>>> getEmployerListByName(@Field("name") String name);

    //报废损坏消耗统一接口
    //{ "original_uuid": 原始记录id, "remark":报废说明, "type":类型(4损坏,5消耗,6报废) "count":报废、损坏、消耗的数量 }
    @POST("api/Sys_good_stock_log/Consume")
    Observable<ApiResult<Object>> commonBroken(@Body BrokenParamBean mParam);

    /**
     * 根据impacode获取仓库位置
     * @param code
     * @return
     */
    @FormUrlEncoded
    @POST("api/Sys_good_stock_log/GetWareHouseByItemCode")
    Observable<ApiResult<List<WareHouseWuzhiBean>>> getWareByImpaCode(@Field("code") String code);

    /**
     * 查询 仓库位置 根据 impa code 和 批次号
     * @param code
     * @param batchno
     * @return
     */
    @FormUrlEncoded
    @POST("api/Sys_good_stock_log/GetWareByImpaAndBatch")
    Observable<ApiResult<List<WareHouseWuzhiBean>>> getWareByImpaCodeAndBatch(@Field("code")String code,@Field("batchno") String batchno);


    /**
     *
     * @param impaCode
     * @return
     */
    @FormUrlEncoded
    @POST("api/Sys_good_stock_log/GetById")
    Observable<ApiResult<Object>> getWareWuzhiByImpaCode(@Field("id") String impaCode);


    /**
     * 获取人员 组织架构
     * @param lan  语言(zh,en)默认 zh
     * @return
     */
    @FormUrlEncoded
    @POST("api/User/GetUserOrg")
    Observable<ApiResult<List<ShipOrgBean>>> getOrgUsers(@Field("language") String lan);

    /**
     *  查询 用户
     * @param mParam
     * @return
     */
    @POST("api/User/GetPageData")
    Observable<HttpResult<List<WorkerBean>>> getUsersByParams(@Body Map<String,Object> mParam);


    /******************************上传******************************/


    /**
     *      File imgFile = new File( filePath );
     *     RequestBody imgBody = RequestBody.create(MediaType.parse("image/*"), imgFile);
     *     MultipartBody.Part  body = MultipartBody.Part.createFormData( "file",imgFile.getName() , imgBody );
     *  上传 单个 图片
     * @param file
     * @return
     */
    @Multipart
    @POST("api/Sys_filelist/UploadSingle")
    Observable<ApiResult<UploadImgBean>> uploadImgSingle(@Part MultipartBody.Part file);

    /**
     *   files   数组
     * @param file
     * @return
     */
    @Multipart
    @POST("api/Sys_filelist/UploadMutilpe")
    Observable<ApiResult<UploadImgBean>> uploadImgMutilpe(@Part MultipartBody.Part file);


    /******************************QSHE******************************/


    /**
     * {"wheres":"[  { \"name\" : \"dict_id\",\"value\" : \"67b98978-48c0-11eb-97c1-0c9d921bbf6e\" }]","rows":"50","page":"1"}
     *  查询 qshe 文件列表
     * @param mParam
     * @return
     */
    @POST("api/Sys_qhse/GetPageData")
    Observable<HttpResult<List<QSHEDetailBean>>> getQSHEDetailList(@Body Map<String,Object> mParam);

    /**
     *    查询 qshe 类型列表   (   查询  休假 类型 一样 用 改 接口 )
     * @param mParam
     * @return
     */
    @POST("api/sys_dict/GetPageData")
    Observable<HttpResult<List<QSHETypeBean>>> getQSHETypeList(@Body Map<String,Object> mParam);



    /******************************CERT证书******************************/

    /**
     *  查询 用户 证书
     * @param mParam
     * @return
     */
    @POST("api/Sys_user_cert/GetPageData")
    Observable<HttpResult<List<CertBean>>> getUserCertList(@Body Map<String,Object> mParam);

    /**
     *  查询 用户 证书 详情
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("api/Sys_user_cert/Get")
    Observable<ApiResult<CertBean>> getUserCertById(@Field("id") String id);

    /**
     *  查询 船舶 证书
     * @param mParam
     * @return
     */
    @POST("api/Sys_ship_cert/GetPageData")
    Observable<HttpResult<List<ShipCertBean>>> getShipCertList(@Body Map<String,Object> mParam);

    /**
     * 查询 船舶 证书 详情
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("api/Sys_ship_cert/Get")
    Observable<ApiResult<ShipCertBean>> getShipCertById(@Field("id") String id);


    /**
     *  提交 证书更换 任务
     * @param mParam
     * @return
     */
    @POST("api/sys_ship_cert_change/Add")
    Observable<ApiResult<Object>> submitShipCertChangeTask(@Body CertChangeParam mParam);



    /******************************员工休假******************************/


    // 提交休假 等
    @POST("api/sys_user_vacation/Add")
    Observable<ApiResult<Object>> applyUserVacation(@Body ApplyVacationBean mParam);


    /**
     *  查询 休假
     * @param mParam
     * @return
     */
    @POST("api/sys_user_vacation/GetPageData")
    Observable<HttpResult<List<UserVacationBean>>> getUserVacationList(@Body Map<String,Object> mParam);

    /**
     * 根据ID查询  提交的休假
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("api/sys_user_vacation/Get")
    Observable<ApiResult<UserVacationBean>> getUserVacationById(@Field("id") String id);


    /****************************** 港口 ******************************/

    /**
     *  查询 港口
     * @param mParam
     * @return
     */
    @POST("api/Sys_port/GetPageData")
    Observable<HttpResult<List<PortBean>>> getShipPortList(@Body Map<String,Object> mParam);



    /****************************** 查字典  各种功能 名称模块 和 id******************************/


    /**
     *    根据 字典 查询  需要的 模块 名称    如（  休假模块 中  休假 类型   ）
     * @param mParam
     * @return
     */
    @POST("api/sys_dict/GetPageData")
    Observable<HttpResult<List<DictFunBean>>> getDictListByParam(@Body Map<String,Object> mParam);



    /****************************** 审批流程 ******************************/


    /**
     *  查询 各种审批 流程
     * @param mParam
     * @return
     */
    @POST("api/Sys_audit/GetPageData")
    Observable<HttpResult<List<AuditProcessBean>>> getAuditProcessByParam(@Body Map<String,Object> mParam);


    /**
     *  添加 审核
     * @param mParam
     * @return
     */
    @POST("api/Sys_audit/Add")
    Observable<ApiResult<Object>> addAuditAction(@Body AuditActionBean mParam);



    /****************************** 系统消息 ******************************/
    @POST("api/Sys_message/GetPageData")
    Observable<HttpResult<List<MsgBean>>> getSysMsgList(@Body Map<String,Object> mParam);


    /****************************** 网络文件 ******************************/
    @FormUrlEncoded
    @POST("api/Sys_filelist/Get")
    Observable<ApiResult<FileInfo>> getFileInfoById(@Field("id") String id);

    /****************************** 供应商******************************/

    /**
     *  查供应商列表
     * @param mParam
     * @return
     */
    @POST("api/Sys_supplier/GetPageData")
    Observable<HttpResult<List<SupplierBean>>> getSupplierList(@Body Map<String,Object> mParam);


    /****************************** 工作交接 ******************************/

    /**
     *  提交 工作交接
     * @param mParam
     * @return
     */
    @POST("api/Sys_user_handover/Add")
    Observable<ApiResult<Object>> applyHandOverTask(@Body ApplyHandleBean mParam);

    /**
     *  我的交接
     * @param mParam
     * @return
     */
    @POST("api/Sys_user_handover/GetPageData")
    Observable<HttpResult<List<HandleInfoBean>>> getUserHandOverList(@Body Map<String,Object> mParam);

    /**
     *  查询 提交的交接
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("api/Sys_user_handover/Get")
    Observable<ApiResult<HandleInfoBean>> getUserHandOverById(@Field("id") String id);

    /****************************** 航次 ******************************/

    /**
     *  查 航次
     * @param mParam
     * @return
     */
    @POST("api/Sys_voyage/GetPageData")
    Observable<HttpResult<List<VoyageBean>>> getVoyageList(@Body Map<String,Object> mParam);



}
